package fr.bludwarf.skywarrior.joueur;

import java.util.Set;

import fr.bludwarf.skywarrior.exceptions.IleInconnueException;
import fr.bludwarf.skywarrior.global.EntiteMere;
import fr.bludwarf.skywarrior.global.Monde;
import fr.bludwarf.skywarrior.ile.Ile;

public class Joueur extends EntiteMere<Ile>
{

	/**
	 * Le joueur ne doit pas déjà exister dans le monde
	 * @param nom
	 */
	public Joueur(Monde monde, String nom)
	{
		super(monde, nom);
		monde.add(this);
	}

	public Joueur(Monde monde, String nom, final Ile ilePrincipale)
	{
		this(monde, nom);
		add(ilePrincipale);
	}

	public Joueur(Monde monde, final String nom, final String nomIlePrincipale) throws IleInconnueException
	{
		this(monde, nom, monde.getIle(nomIlePrincipale));
	}

	public Ile getIlePrincipale()
	{
		return getPremierFils();
	}

	@Override
	public String toString()
	{
		final StringBuilder sb = new StringBuilder();

		sb.append(_nom).append(" : ");

		boolean first = true;
		for (final Ile ile : getIles())
		{
			if (!first)
			{
				sb.append(", ");
			}
			sb.append(ile);
			if (first)
			{
				first = false;
			}
		}

		return sb.toString();
	}

	public Set<Ile> getIles()
	{
		return getFils();
	}

	public boolean possede(Ile ile)
	{
		return getIles().contains(ile);
	}
	
	@Override
	public boolean equals(Object obj)
	{
		if (obj instanceof Joueur)
		{
			return equals((Joueur) obj);
		}
		return false;
	}
	
	public boolean equals(Joueur joueur)
	{
		return getNom().equals(joueur.getNom());
	}
	
	@Override
	public void add(Ile ile)
	{
		ile.setJoueur(this);
		super.add(ile);
	}

}
